// import {ethers, network} from 'hardhat';
import {
    PayableOverrides,
    BigNumber ,
    BigNumberish,
    CallOverrides,
    Overrides
} from 'ethers';
import { MonkeyKing } from '../../types';
import { IERC721Client } from './IERC721-client';


export interface IMonkeyKingClient extends IERC721Client {


    contract(): Promise<MonkeyKing>;

    getArrtibutesFactory(
      overrides?: CallOverrides
    ): Promise<
      
        [string, string, string, string, string, string, string, string, string]
      
      >;

    getCurrentIssue(overrides?: CallOverrides): Promise<BigNumber>;

    getIssueTotal(overrides?: CallOverrides): Promise<BigNumber>;

    getMonkeyKing(
        tokenId: BigNumberish,
        overrides?: CallOverrides
      ): Promise<
      { tokenId: BigNumber; contractAddr: string }[]
        // [
        //     [BigNumber, string] & { tokenId: BigNumber; contractAddr: string },
        //     [BigNumber, string] & { tokenId: BigNumber; contractAddr: string },
        //     [BigNumber, string] & { tokenId: BigNumber; contractAddr: string },
        //     [BigNumber, string] & { tokenId: BigNumber; contractAddr: string },
        //     [BigNumber, string] & { tokenId: BigNumber; contractAddr: string },
        //     [BigNumber, string] & { tokenId: BigNumber; contractAddr: string },
        //     [BigNumber, string] & { tokenId: BigNumber; contractAddr: string },
        //     [BigNumber, string] & { tokenId: BigNumber; contractAddr: string },
        //     [BigNumber, string] & { tokenId: BigNumber; contractAddr: string }
        // ]
        
      >;
    initArrtibutesFactory(
        arrtibutes: [string, string, string, string, string, string ,string, string, string],
        config ?:PayableOverrides
    ):Promise<any>;


    newArrtibutesFactorys(
        overrides?: Overrides & { from?: string | Promise<string> }
      ): Promise<any>;

    SafeMint(
    to: string,
    arrtibutes: [
        { tokenId: BigNumberish; contractAddr: string },
        { tokenId: BigNumberish; contractAddr: string },
        { tokenId: BigNumberish; contractAddr: string },
        { tokenId: BigNumberish; contractAddr: string },
        { tokenId: BigNumberish; contractAddr: string },
        { tokenId: BigNumberish; contractAddr: string },
        { tokenId: BigNumberish; contractAddr: string },
        { tokenId: BigNumberish; contractAddr: string },
        { tokenId: BigNumberish; contractAddr: string }
    ],
    overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<any>;

    ChangeArrtibute(
        monkeyKingTokenId: BigNumberish,
        option: BigNumberish,
        _newtokenId: BigNumberish,
        newContractAddr: string,
        config:PayableOverrides
    ):Promise<any>;
    
}


